import 'package:dartkit/dartkit.dart';
import 'package:postgres/postgres.dart';

part 'model.dart';

extension TableOperationKit on Connection {
  /// 删除某个表格，并用bool的形式返回删除结果
  /// 如果表格不存在的话，则会返回false
  /// TODO：转移到Table抽象类中
  Future<void> tableDelete(String name) async =>
      await execute(Sql.named("DROP TABLE IF EXISTS $name CASCADE;"));

  /// 删除所有表格
  @Deprecated("危险操作，使用前务必知道自己在干什么")
  Future<void> tableDeleteAll() async {
    final List<String> tables = await argConn.value.tablesAll;
    for (final name in tables) {
      await argConn.value.tableDelete(name);
    }
  }

  /// 获取所有表格的名字，有了表格之后，就可以对表格进行各种操作
  /// 比如说统计一共有多少个表格，以及对每个表格名字进行一些操作
  Future<List<String>> get tablesAll async {
    final results = await execute("""
SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'public';
""");

    // 提取表格名字并返回
    return results.map((row) => row[0] as String).toList();
  }
}

/// 创建所有业务需要的表格，随着软件的发展可能会变得更多
Future<void> createBusinessTables() async {
  await userTable.createTable();
  await pomoTable.createTable();
  await thoughtTable.createTable();
  await diaryTable.createTable();
}
